<?php
class StringTool
{
	/**
     * 取得中英文混合字符串占位数
     * @param 中英文混合字符串
     */
    static function getStringLen($str) {

		return (strlen($str) + mb_strlen($str,'UTF8'))/2;
	}

	/**
     * 把超长中英文混合字符串换为省略号
     * @param 中英文混合字符串
     */
    static function getStrEllipsis($str,$len) {

    	$returnstr = "";
		$str_length = strlen($str);
		$mb_str_length = mb_strlen($str,'utf8');
		$f_str_length = StringTool::getStringLen($str);

		//全半角字符串
		if ($f_str_length == $mb_str_length){

			if ($f_str_length > $len){
				$returnstr = substr($str,0,$len)."...";
			}else{
				$returnstr = $str;
			}
		}

		//含义全角字符串
		if ($f_str_length > $mb_str_length){
			$i = 0;
    		$n = 0;
			while(($n < $len) && ($i <= $str_length)){
				$temp_str = substr($str,$i,1);
				$ascnum = ord($temp_str);
				if($ascnum >= 224){
					$returnstr = $returnstr.substr($str,$i,3);
					$i = $i + 3;
				}elseif($ascnum >= 192){
					$returnstr = $returnstr.substr($str,$i,2);
					$i = $i + 2;
				}elseif(($ascnum >= 65) && ($ascnum <= 90)){
					$returnstr = $returnstr.substr($str,$i,1);
					$i = $i + 1;
				}else{
					$returnstr = $returnstr.substr($str,$i,1);
					$i = $i + 1;
				}
				$n = StringTool::getStringLen($returnstr);
			}

			if ($f_str_length > $len){
				$returnstr = $returnstr . "...";
			}
		}
		return $returnstr;
	}

	/**
     * 把超长中英文混合字符串截取
     * @param 中英文混合字符串
     */
    static function getSubStr($str,$len) {

    	$returnstr = "";
		$str_length = strlen($str);
		$mb_str_length = mb_strlen($str,'utf8');
		$f_str_length = StringTool::getStringLen($str);

		//全半角字符串
		if ($f_str_length == $mb_str_length){

			if ($f_str_length > $len){
				$returnstr = substr($str,0,$len);
			}else{
				$returnstr = $str;
			}
		}

		//含义全角字符串
		if ($f_str_length > $mb_str_length){
			$i = 0;
    		$n = 0;
			while(($n < $len) && ($i <= $str_length)){
				$temp_str = substr($str,$i,1);
				$ascnum = ord($temp_str);
				if($ascnum >= 224){
					$returnstr = $returnstr.substr($str,$i,3);
					$i = $i + 3;
				}elseif($ascnum >= 192){
					$returnstr = $returnstr.substr($str,$i,2);
					$i = $i + 2;
				}elseif(($ascnum >= 65) && ($ascnum <= 90)){
					$returnstr = $returnstr.substr($str,$i,1);
					$i = $i + 1;
				}else{
					$returnstr = $returnstr.substr($str,$i,1);
					$i = $i + 1;
				}
				$n = StringTool::getStringLen($returnstr);
			}
		}
		return $returnstr;
	}
}